﻿#region LicenseHeader

// Copyright 2012 The Trustees of Indiana University.  All rights reserved.
// 
// The Indiana University licenses this file to you under the Apache License, 
// Version 2.0 (the "License"); you may not use this file except in compliance 
// with the License.  You may obtain a copy of the License at 
// 
// http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software 
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
// See the License for the specific language governing permissions and 
// limitations under the License.
// 
// @author Thilina Gunarathne (tgunarat@indiana.edu)

#endregion

using System;
using System.Diagnostics;
using AzureMRCore.Client;
using Credentials;
using Microsoft.WindowsAzure;

namespace WordCountMRClient
{
    internal class WordCountClient
    {
        // args : num_seq block_size maxBlocks jobname
        private static void Main(string[] args)
        {
            if (args.Length < 4)
            {
                Console.Out.WriteLine(
                    "Usage:  WordCountMRClient <jobID> <inputContainerName> <outContainerName> <NumberOfReduceTasks>");
            }
            string jobID = args[0];
            string inputContainer = args[1];
            string outputContainer = args[2];
            int numReduceTasks = Int32.Parse(args[3]);

            Stopwatch stopwatch = Stopwatch.StartNew();
            CloudStorageAccount storageAccount = ClientCredentials.GetClientStorageAccount();
            TwisterAzureClient twisterAzureClient = new TwisterAzureClient(storageAccount, jobID, "mapschedq",
                                                                           "reduceschedq");
            twisterAzureClient.ProcessMapRed("WordCountMR", inputContainer, 0, "", numReduceTasks,
                                             outputContainer);
            twisterAzureClient.WaitForCompletion(500);
            Console.Out.WriteLine("Time (ms) " + stopwatch.ElapsedMilliseconds);
            Console.In.ReadLine();
        }
    }
}